#include "set.h"

/***********************************
函数名：TimeSet
功  能：模式1 时钟设置
参  数：无
返回值：无
*************************************/
void TimeSet(void)
{
	if(1 == mode)//时钟设置
	{
		if(1 == add)
		{
			add = 0;	
			switch(TimeChoice)//秒分时周年月日修改标志位
			{
				case 0: sec++;//秒数
					    if((sec & 0x0f) > 9) sec += 6;//时间用BCD码表示，10表示为0x10,所以在低四位超过9需加6产生进位
						if(sec >= 0x60)  sec = 0;//60秒到计为0
						break;
				case 1: min++;//分钟
						if((min & 0x0f) > 9) min += 6;
						if(min >= 0x60) min = 0;//60分到计为0
						break;
				case 2: hour++;//小时
						if((hour & 0x0f) > 9) hour += 6;
						if(hour >= 0x24) hour=0;//24时计为0
						break;
				case 3: week++;//星期
						if((week & 0x0f) > 9) week += 6;
						if(week >= 0x08) week = 1;//7天为一周
						break;
				case 4: year++;//年
						if((year & 0x0f) > 9) year += 6;
						if(year >= 0x99) year = 0;//DS1302表示的是年的后两位数，所以不可能超过99
						break;
				case 5: month++;//月份
						if((month & 0x0f) > 9) month += 6;
						if(month >= 0x13) month = 1;//12月为1年
						break;
				case 6: day++;//天数
						if((day & 0x0f) > 9) day += 6;
						if( month == 1 || month == 3 || month == 5 || month == 7 || 
							month == 8 || month == 10 || month == 12)//日越界判断
						{
							if(day > 0x31){day = 1;}//大月 31天
						}
						else if(month == 4 || month == 6 || month == 9 || month == 11)
						{
							if(day > 0x30){day = 1;}//小月 30天
						}
						else if(month == 2)//2月在有无闰年有不同的天数
							{
								if(year % 4 == 0)//对后两位年份判断是不是闰年
								{
									if(day > 0x29){day = 1;}//闰年2月 29天
								}
								else
								{
									if(day > 0x28){day = 1;}//平年2月 28天
								}
							}
						break;	
			}	
		}																
	}				
}

/***********************************
函数名：AlarmSet
功  能：模式2 闹钟设置
参  数：无
返回值：无
*************************************/	
void AlarmSet(void)
{
	if(2 == mode)//闹钟设置
	{
		if(1 == add)//加标志为1，执行加1
		{
			add = 0;//标志清零	
			switch(TimeChoice)//闹钟设置键选择 对分钟加一 对小时加一 打开和关闭闹钟 回到秒数
			{
				case 0: AlarmTime[0]++;//对分钟加一
						if((AlarmTime[0] & 0x0f) > 9) AlarmTime[0] += 6;
						if(AlarmTime[0] >= 0x60) AlarmTime[0] = 0;
						break;
				case 1: AlarmTime[1]++;//对小时加一
						if((AlarmTime[1] & 0x0f) > 9) AlarmTime[1] += 6;
						if(AlarmTime[1] >= 0x24) AlarmTime[1] = 0;
						break; 
				case 2: AlarmFlag = !AlarmFlag;//打开和关闭闹钟 1为打开 0为关闭
						break;
				case 3:AlarmTime[0]++;//回到秒数
					   if((AlarmTime[0] & 0x0f) > 9) AlarmTime[0] += 6;
					   if(AlarmTime[0] >= 0x60) AlarmTime[0] = 0;
					   break;
				case 4:AlarmTime[1]++;
					   if((AlarmTime[1] & 0x0f) > 9) AlarmTime[1] += 6;
					   if(AlarmTime[1] >= 0x24) AlarmTime[1] = 0;
					   break; 
				case 5:AlarmFlag = !AlarmFlag;
				       break;
				case 6:AlarmTime[0]++;
				       if((AlarmTime[0] & 0x0f) > 9) AlarmTime[0] += 6;
				       if(AlarmTime[0] >= 0x60) AlarmTime[0] = 0;
				       break;
			}	
		}																	
	}		
}